/**
 *
 */
package metier.JDBC;

import java.sql.Connection;
import java.sql.PreparedStatement;
import metier.*;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.ArrayList;
import metier.Semestre;
/**
 * @author Quipu-Team
 *
 */
public class IncompatibiliteJDBC extends Incompatibilite {
    private final static String GROUPE1 = "IDGROUPE1";
    private final static String GROUPE2 = "IDGROUPE2";
    private final static String NOMTABLE = "INCOMPATIBLE";


    private final static String selectQuery = "select * from "
            + NOMTABLE;
    private final static String selectQueryGroupe = "select * from "
            + NOMTABLE + " where "
            + GROUPE1 + " = ? or "
            + GROUPE2 + " = ? ";
    private final static String deleteQuery = "DELETE FROM "
            +NOMTABLE + " WHERE "
            +GROUPE1 + "= ? and "
            +GROUPE2 + "= ? ";
    private final static String insertQuery = "insert into "+ NOMTABLE + " values(?, ?)";

    /**
     * @param nom
     * @param prenom
     * @param statut
     */
    public IncompatibiliteJDBC(Groupe groupe1, Groupe groupe2) {
        super(groupe1,groupe2);
    }

    public IncompatibiliteJDBC(){
        super();
    }


    @Override
    public void insert() throws ExceptionMetier {
        try {
			Connection con = ConnectionJDBC.getConnection();
			PreparedStatement insertEnseignant = con.prepareStatement(insertQuery);
			insertEnseignant.setInt(1, this.getGroupe1().getId());
			insertEnseignant.setInt(2, this.getGroupe2().getId());
			insertEnseignant.executeQuery();
        }
        catch (ClassNotFoundException ex) {
            throw new ExceptionMetier("Insert failed", ex);
        }
        catch (SQLException ex) {
            throw new ExceptionMetier("Insert failed", ex);
        }
    }
    /**
     * M�thode qui permet de supprimer l'objet dans le syst�me de stockage
     */
    @Override
    public void delete() throws ExceptionMetier {
        try {
            Connection con = ConnectionJDBC.getConnection();
            PreparedStatement sta = con.prepareStatement(deleteQuery);
            sta.setInt(1, getGroupe1().getId());
            sta.setInt(2, getGroupe2().getId());
            sta.executeUpdate();
        } catch (ClassNotFoundException ex) {
            throw new ExceptionMetier("Delete failed", ex);
        } catch (SQLException ex) {
            throw new ExceptionMetier("Delete failed", ex);
        }
    }

    /**
     * M�thode qui permet d'obtenir la liste
     */
    public static ArrayList<ElementListe> select() throws ExceptionMetier {
        try {
            ArrayList<ElementListe> list = new ArrayList<ElementListe>();
            ResultSet rset = null;
            Connection con = ConnectionJDBC.getConnection();
            Statement sta = con.createStatement();
            rset = sta.executeQuery(selectQuery);
            while (rset.next()) {


                Groupe g1 = new GroupeJDBC();
                g1.load(rset.getInt(GROUPE1));
                Groupe g2 = new GroupeJDBC();
                g2.load(rset.getInt(GROUPE2));
                String nomgroupe1 = g1.getNom();
                String nomgroupe2 = g2.getNom();

                ElementListe e = new ElementListe(0, nomgroupe1 + ", "+ nomgroupe2);
                list.add(e);
            }
            rset.close();
            sta.close();
            return list;
        } catch (ClassNotFoundException ex) {
            throw new ExceptionMetier("Select failed", ex);
        } catch (SQLException ex) {
            throw new ExceptionMetier("Select failed", ex);
        }
    }


    public static ArrayList<ElementListe> selectGroupe(int idGroupe) throws ExceptionMetier {
        try {
            ArrayList<ElementListe> list = new ArrayList<ElementListe>();
            Connection con = ConnectionJDBC.getConnection();
            PreparedStatement psta = con.prepareStatement(selectQueryGroupe);
            psta.setInt(1, idGroupe);
            psta.setInt(2, idGroupe);
            ResultSet rset = psta.executeQuery();
            while (rset.next()) {
                Groupe g1 = new GroupeJDBC();
                g1.load(rset.getInt(GROUPE1));
                Groupe g2 = new GroupeJDBC();
                g2.load(rset.getInt(GROUPE2));
                String nomgroupe1 = g1.getNom();
                String nomgroupe2 = g2.getNom();

                ElementListe e = new ElementListe(0, nomgroupe1 + ", "+ nomgroupe2);
                list.add(e);
            }
            rset.close();
            psta.close();
            return list;
        } catch (ClassNotFoundException ex) {
            throw new ExceptionMetier("Select failed", ex);
        } catch (SQLException ex) {
            throw new ExceptionMetier("Select failed", ex);
        }
    }
}

